const vscode = require('vscode');
const WebviewProvider = require('./webviewProvider');
const { getWorkspaceServerManager } = require('./workspaceServerManager');
const { getOutputChannel, logError, logInfo } = require('./logger');

/**
 * 插件被激活时触发，所有代码总入口
 * @param {*} context 插件上下文
 */
exports.activate = function(context) {
    logInfo('恭喜，您的扩展"web-login-plugin"已被激活！');

    // 注册WebView提供者
    const provider = new WebviewProvider(context);
    context.subscriptions.push(
        vscode.window.registerWebviewViewProvider(
            'accounts.view',
            provider
        )
    );

    // 获取工作空间服务器管理器实例
    const workspaceServerManager = getWorkspaceServerManager();

    // 启动所有当前工作空间的服务器
    workspaceServerManager.startAllWorkspaceServers().catch(error => {
        logError('启动工作空间服务器失败', error);
        vscode.window.showErrorMessage(`启动工作空间服务器失败: ${error.message}`);
    });

    // 注册输出通道到上下文，确保在扩展被销毁时正确清理
    context.subscriptions.push(getOutputChannel());

    // 注册清理函数
    context.subscriptions.push({
        dispose: async () => {
            logInfo('正在清理工作空间服务器...');
            await workspaceServerManager.stopAllWorkspaceServers();
            
            // 清理全局管理器客户端
            const globalServerManager = require('./globalServerManager');
            await globalServerManager.cleanup();
        }
    });

    logInfo('插件激活完成，工作空间服务器管理器已启动');
};

/**
 * 插件被释放时触发
 */
exports.deactivate = async function() {
    logInfo('您的扩展"web-login-plugin"已被释放！');
    try {
        const workspaceServerManager = getWorkspaceServerManager();
        await workspaceServerManager.stopAllWorkspaceServers();
        logInfo('所有工作空间服务器已停止');
    } catch (error) {
        logError('停止工作空间服务器时出错', error);
    }
};